package com.jule.miaozhuapc.util;

import java.util.HashMap;
import java.util.Map;

import com.jule.miaozhuapc.controller.PingController;
import com.pingplusplus.Pingpp;
import com.pingplusplus.model.Charge;
import org.apache.log4j.Logger;
import org.json.JSONObject;

/**
 *  ping++ 支付类
 * @author sunshine
 *
 */
public class PingPayUtil {
	// 发起支付请求客户端的 IP 地址，格式为 IPV4，如: 127.0.0.1 192.168.1.132
	private String client_ip = "127.0.0.1";
	//支付方式默认wx
	private String channel = "wx";

	//支付 key live 模式
	public static final String PING_APPIKEY_LIVE= "sk_live_q144yPubDmnHKyfPW94Sijv9";
	// 支付key test 模式
	public static final String PING_APPIKEY_TEST= "sk_test_HyTSyLCO8uj5Xn9Oe9iHO8WD";
	// appId
	public static final String PING_APPID = "app_TK0qbD1Cqrz5CGGO"; 
	//ping++地址
	public static final String PING_APIBASE = "https://api.pingxx.com";
	private Logger logger = Logger.getLogger(PingController.class);

	/**
	 *  设置支付方式 默认微信
	 * @param channel
	 */
	public PingPayUtil(String channel ) {
		this.channel = channel;
	}

	/**
	 * 设置额外参数
	 */
	private Map<String, Object> extra = new HashMap<String, Object>();

	public  PingPayUtil setExtra(String opend_id){
		if (opend_id != null && !"".equals(opend_id)){
			extra.put("open_id", opend_id);
		}
		return this;
	}
	/**
	 *  默认 支付方式为 wx
	 */
	public PingPayUtil( ) {
	}

	/**
	 *  创建一个支付订单
	 * @param order_no  订单号
	 * @param amount 订单金额 单位 元
	 * @param subject 订单标题
	 * @param body 订单内容
	 * @return
	 * @throws Exception
	 */
	public  String  createCharge(String  order_no, double amount, String subject, String body )  throws Exception{
		
		   Pingpp.overrideApiBase(PING_APIBASE);
	      Pingpp.apiKey = PING_APPIKEY_LIVE;
	       // 建议使用 PKCS8 编码的私钥，可以用 openssl 将 PKCS1 转成 PKCS8
	       //Pingpp.privateKey = PingppTestData.getPKCS8PrivateKey();
	       Pingpp.DEBUG = true;
	        String appId = PING_APPID;

	        Charge charge = null;
	        Map<String, Object> chargeMap = new HashMap<String, Object>();
	        chargeMap.put("amount", amount*100);//订单总金额, 人民币单位：分（如订单总金额为 1 元，此处请填 100）
	        chargeMap.put("currency", "cny"); //
	        chargeMap.put("subject", subject);
	        chargeMap.put("body", body);
	        chargeMap.put("order_no", order_no);// 推荐使用 8-20 位，要求数字或字母，不允许其他字符
	        chargeMap.put("channel", channel);// 支付使用的第三方支付渠道取值，请参考：https://www.pingxx.com/api#api-c-new
	        chargeMap.put("client_ip", client_ip); // 发起支付请求客户端的 IP 地址，格式为 IPV4，如: 127.0.0.1 192.168.1.132
	        Map<String, String> app = new HashMap<String, String>();
	        app.put("id", appId);
	        chargeMap.put("app", app);


	        chargeMap.put("extra", extra);
	        System.out.print(new JSONObject(chargeMap));
	        try {
	            // 发起 charge 创建请求
	            charge = Charge.create(chargeMap);
	            // 传到客户端请先转成字符串 .toString(), 调该方法，会自动转成正确的 JSON 字符串
	            String chargeString = charge.toString();
	            logger.info("charge = " +charge);
	            return charge.toString();
	        } catch (Exception e) {
	            e.printStackTrace();
	        }
	        return "";
	}
	   
//	public static void main(String[] args) {
//		// TODO Auto-generated method stub
//		testCreateCharge();
//	}
}
